﻿// Sunscreen POJ - 3614.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
//https://vjudge.csgrandeur.cn/problem/POJ-3614

/*
为了避免晒黑时难看的灼伤，每头 C（1 ≤ C ≤ 2500）奶牛在海边时都必须用防晒霜遮住自己的皮。
奶牛 i 有一个最低和最高的 SPF 值（1 ≤ minSPFi ≤ 1,000；minSPFi ≤ maxSPFi ≤ 1,000）。
如果 SPF 值太低，奶牛会被晒伤；如果 SPF 值太高，奶牛根本不会晒黑........。

奶牛有一个野餐篮，里面装有 L（1 ≤ L ≤ 2500）瓶防晒乳液，每瓶 i 的 SPF 值为 SPFi（1 ≤ SPFi ≤ 1000）。
乳液瓶 i 可为奶牛涂抹乳液。一头奶牛只能使用一瓶乳液。

在有乳液的情况下，最多有多少头奶牛可以在晒黑时保护自己？

输入

* 第 1 行： 两个空格分隔的整数： C 和 L
* 第 2...C+1 行： 第 i 行用两个整数：minSPFi 和 maxSPFi 描述奶牛 i 的乳液需求量
* 第 C+2...C+L+1 行： 第 i+C+1 行用空格分隔的整数描述了第 i 瓶防晒乳液： SPFi 和 coveri

输出

单行，包含一个整数，即晒黑时可保护的奶牛的最大数量

输入样本
3 2
3 10
2 5
1 5
6 2
4 1
样本输出
2
*/


const int N = 2510;

struct COW {
	int l; int r;
}cows[N];

struct SPF {
	int i, num;
}spf[N];

int c, t;

bool cmpcow(const struct COW& a, const struct COW& b) {
	if (a.l > b.l) return true;
	else if (a.l == b.l) {
		return a.r < b.r;
	}

	return false;
}


bool cmpspf(const struct SPF& a, const struct SPF& b) {
	return a.i > b.i;
}


void solve() {
	int cowidx = 0; int spfidx = 0;
	int ans = 0;

	for (int i = 0; i <c; i++) {
		int l = cows[i].l; int r = cows[i].r;
		for (int j =0; j  < t; j++) {
			if (spf[j].i >= l && spf[j].i <= r && spf[j].num > 0) {
				ans++; spf[j].num--; break;
			}
		}
	}

	cout << ans << endl;
}

int main()
{
	cin >> c >> t;
	for (int i = 0; i < c; i++) {
		cin >> cows[i].l >> cows[i].r;
		if (cows[i].l > cows[i].r) swap(cows[i].r, cows[i].l);
	}
	for (int i = 0; i < t; i++) {
		cin >> spf[i].i >> spf[i].num;
	}
	sort(cows, cows + c,cmpcow);
	sort(spf, spf+t,cmpspf);

	solve();

	return 0;
}

 